package com.ny.mapper;

import com.ny.entity.User;
import org.apache.ibatis.annotations.*;

/**
 * 用户数据访问接口
 * 提供用户相关的数据库操作方法
 */
@Mapper
public interface UserMapper {

    /**
     * 添加用户信息到数据库
     * 将用户对象的信息插入到user表中
     *
     * @param user 用户对象，包含用户名、密码、昵称、电话、邮箱等信息
     * @return 返回影响的行数，1表示插入成功，0表示插入失败
     */
    @Insert("insert into user(username,password,nickname,phone,email,is_active,created_time) values(#{username},#{password},#{nickname},#{phone},#{email},#{isActive},#{createdTime})")
    int addUser(User user);

    /**
     * 根据用户名查询用户信息
     * 从user表中查找匹配用户名的用户记录
     *
     * @param username 用户名
     * @return 返回匹配的用户对象，如果未找到则返回null
     */
    @Select("select * from user where username = #{username}")
    public User findUser(@Param("username")String username);

    /**
     * 根据用户名查询用户信息
     * 从user表中查找匹配用户名的用户记录
     *
     * @param username 用户名
     * @return 返回匹配的用户对象，如果未找到则返回null
     */
    @Select("select * from user where username = #{username}")
    public User findByUsername(@Param("username")String username);

    /**
     * 根据用户ID查询用户信息
     * 从user表中查找匹配用户ID的用户记录
     *
     * @param userId 用户ID
     * @return 返回匹配的用户对象，如果未找到则返回null
     */
    @Select("select * from user where user_id = #{userId}")
    public User findByUserId(@Param("userId")Integer userId);

    /**
     * 根据邮箱查询用户信息
     * 从user表中查找匹配邮箱的用户记录
     *
     * @param email 邮箱
     * @return 匹配的用户对象，如果未找到则返回null
     */
    @Select("select * from user where email = #{email}")
    public User findUserByEmail(@Param("email")String email);

    /**
     * 更新用户密码
     * @param password 新密码（加密后的）
     * @param salt 新的盐值
     * @param email 用户邮箱
     * @return 返回影响的行数，1表示更新成功，0表示更新失败
     */
    @Update("update user set password = #{password} where email = #{email}")
    public int updatePassword(@Param("password") String password, @Param("salt") String salt, @Param("email") String email);


}